﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Ahi.Entity;
using Ahi.Entity.Enums;
using Ahi.Controller;
using Ahi.Base;
using MongoDB.Bson;

namespace Ahi.Uyelik
{
    public partial class UyeDuzenlemeForm : Base.DuzenleBaseForm
    {
        public UyeEntity entity { get; set; }

        List<UyeEntity.BelgeEntity.BelgeTipiEntity> belgeTipleri;
        UyeEntity.BelgeEntity.BelgeTipiEntity belgeTipiSec = new UyeEntity.BelgeEntity.BelgeTipiEntity { Isim = "[YENİ TİP TANIMLA]" };

        List<Ahi.Entity.UyeEntity.UyelikTipiEntity> uyeTipleri;
        Ahi.Entity.UyeEntity.UyelikTipiEntity uyeTipiSec = new Ahi.Entity.UyeEntity.UyelikTipiEntity { Isim = "[YENİ TİP TANIMLA]" };

        public UyeEntity.BelgeEntity CurrentBelge
        {
            get
            {
                if (bsBelge.Current is UyeEntity.BelgeEntity)
                    return bsBelge.Current as UyeEntity.BelgeEntity;
                return null;
            }
        }

        public UyeDuzenlemeForm()
        {
            InitializeComponent();
        }

        public override void Hazirla()
        {
            repositoryItemLookUpAdresTipi.SetEnumList<AdresTipi>();
            repositoryItemLookUpEmailTipi.SetEnumList<EmailTipi>();
            repositoryItemLookUpKanGrubu.SetEnumList<KanGrubu>();
            repositoryItemLookUpTelefonTipi.SetEnumList<TelefonTipi>();
            repositoryItemLookUpTeslimDurumu.SetEnumList<TeslimDurumu>();
            cinsiyetLookUpEdit.SetEnumList<Cinsiyet>();

            UyelikTipleriniDoldur();//   repositoryItemLookUpUyeSekli.SetEnumList<UyeSekli>();
            BelgeTipleriniDoldur();
        }

        private void UyelikTipleriniDoldur()
        {
            uyeTipleri = MongoAdaptor.Instance.GetData<Ahi.Entity.UyeEntity.UyelikTipiEntity>();
            uyeTipleri.Add(uyeTipiSec);
            repositoryItemLookUpUyeSekli.Properties.Items.Clear();
            repositoryItemLookUpUyeSekli.Properties.Items.AddRange(uyeTipleri.ToArray());
            repositoryItemLookUpUyeSekli.EditValueChanging += new DevExpress.XtraEditors.Controls.ChangingEventHandler(repositoryItemLookUpUyeSekli_EditValueChanging);
        }

        void repositoryItemLookUpUyeSekli_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
        {
            if (!e.NewValue.Equals(uyeTipiSec)) return;

            string yeniUyeTipi = string.Empty;
            if (GirdiForm.ShowGirdiDialog<string>(ref yeniUyeTipi, "Lütfen Tanımlayacağınız yeni üye tipinin ismini giriniz") == System.Windows.Forms.DialogResult.OK)
            {
                uyeTipleri.Add(new Ahi.Entity.UyeEntity.UyelikTipiEntity { Isim = yeniUyeTipi });
                uyeTipleri.Remove(uyeTipiSec);
                MongoAdaptor.Instance.Save<Ahi.Entity.UyeEntity.UyelikTipiEntity>(uyeTipleri);
                repositoryItemLookUpUyeSekli.EditValueChanging -= new DevExpress.XtraEditors.Controls.ChangingEventHandler(repositoryItemLookUpUyeSekli_EditValueChanging);
                UyelikTipleriniDoldur();

                entity.UyelikTipi = uyeTipleri.Where(x => x.Isim == yeniUyeTipi).FirstOrDefault();
            }
            else
                e.Cancel = true;
        }

        private void BelgeTipleriniDoldur()
        {
            belgeTipleri = MongoAdaptor.Instance.GetData<UyeEntity.BelgeEntity.BelgeTipiEntity>();
            belgeTipleri.Add(belgeTipiSec);
            repositoryItemBelgeTipi.Items.Clear();
            repositoryItemBelgeTipi.Items.AddRange(belgeTipleri.ToArray());
            repositoryItemBelgeTipi.EditValueChanging += new DevExpress.XtraEditors.Controls.ChangingEventHandler(repositoryItemLookUpBelgeTipi_EditValueChanging);
        }

        void repositoryItemLookUpBelgeTipi_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
        {
            if (!e.NewValue.Equals(belgeTipiSec)) return;

            string yeniBelgeTipi = string.Empty;
            if (GirdiForm.ShowGirdiDialog<string>(ref yeniBelgeTipi, "Lütfen Tanımlayacağınız yeni belge tipinin ismini giriniz") == System.Windows.Forms.DialogResult.OK)
            {
                belgeTipleri.Add(new UyeEntity.BelgeEntity.BelgeTipiEntity { Isim = yeniBelgeTipi });
                belgeTipleri.Remove(belgeTipiSec);
                MongoAdaptor.Instance.Save<UyeEntity.BelgeEntity.BelgeTipiEntity>(belgeTipleri);
                repositoryItemBelgeTipi.EditValueChanging -= new DevExpress.XtraEditors.Controls.ChangingEventHandler(repositoryItemLookUpBelgeTipi_EditValueChanging);
                BelgeTipleriniDoldur();

                if (CurrentBelge != null)
                {
                    //CurrentBelge.BelgeTipi = belgeTipleri.Where(x => x.Isim == yeniBelgeTipi).FirstOrDefault();
                    gridViewBelgeler.SetRowCellValue(gridViewBelgeler.FocusedRowHandle, "BelgeTipi", belgeTipleri.Where(x => x.Isim == yeniBelgeTipi).FirstOrDefault());
                }
            }
            else
                e.Cancel = true;
        }

        public override void KayitYukle(Base.IdFormParameter Id)
        {
            entity = MongoAdaptor.Instance.GetDataById<UyeEntity>(Id.AsObjectId);
            bsData.DataSource = entity;
        }

        public override void YeniKayit()
        {
            entity = bsData.AddNew() as UyeEntity;
        }

        public override void YuklediktenSonraCalistir()
        {
            if (!Id.HasValue)
            {
                entity.Cinsiyet = Cinsiyet.Erkek;
                entity.UyelikBaslangicTarihi = DateTime.Now;
                bsAdres.ResetBindings(false);
            }
        }

        public override void Kaydet()
        {
            MongoAdaptor.Instance.Save<UyeEntity>(entity);
            DialogResult = System.Windows.Forms.DialogResult.OK;
            Close();
        }
    }
}
